#include<bits/stdc++.h>
#include<bits/extc++.h>
#define int long long
using namespace std;
using namespace __gnu_pbds;
const int N=4e5+10;
int a[N],c[N];
struct Segment_Tree
{
    int cnt[N<<2],sum[N<<2],ft[N<<2],bk[N<<2];
    inline void pushup(int x)
    {
        cnt[x]=cnt[x<<1]+cnt[x<<1|1];
        sum[x]=sum[x<<1]+sum[x<<1|1];
        ft[x]=ft[x<<1]+ft[x<<1|1]+cnt[x<<1|1]*sum[x<<1];
        bk[x]=bk[x<<1|1]+bk[x<<1]+cnt[x<<1]*sum[x<<1|1];
    }
    void upd(int x,int l,int r,int pos,int v)
    {
        if(l==r) cnt[x]+=v,sum[x]+=v*c[pos],ft[x]=bk[x]=sum[x];
        else
        {
            int mid=(l+r)>>1;
            if(pos<=mid) upd(x<<1,l,mid,pos,v);
            else upd(x<<1|1,mid+1,r,pos,v);
            pushup(x);
        }
    }
    int qft(int x,int l,int r,int k)
    {
        if(l==r) return min(cnt[x],k)*c[l];
        else
        {
            int mid=(l+r)>>1;
            if(cnt[x<<1]>=k) return qft(x<<1,l,mid,k);
            else return sum[x<<1]+qft(x<<1|1,mid+1,r,k-cnt[x<<1]);
        }
    }
    int qbk(int x,int l,int r,int k)
    {
        if(l==r) return min(cnt[x],k)*c[l];
        else
        {
            int mid=(l+r)>>1;
            if(cnt[x<<1|1]>=k) return qbk(x<<1|1,mid+1,r,k);
            else return sum[x<<1|1]+qbk(x<<1,l,mid,k-cnt[x<<1|1]);
        }
    }
    int QFT(int x,int l,int r,int k)
    {
        if(k<=0) return 0;
        if(l==r) return min(cnt[x],k)*c[l];
        else
        {
            int mid=(l+r)>>1;
            if(cnt[x<<1]>=k) return QFT(x<<1,l,mid,k);
            else return QFT(x<<1|1,mid+1,r,k-cnt[x<<1])+ft[x<<1]+sum[x<<1]*(k-cnt[x<<1]);
        }
    }
    int QBK(int x,int l,int r,int k)
    {
        if(k<=0) return 0;
        if(l==r) return min(cnt[x],k)*c[l];
        else
        {
            int mid=(l+r)>>1;
            if(cnt[x<<1|1]>=k) return QBK(x<<1|1,mid+1,r,k);
            else return QBK(x<<1,l,mid,k-cnt[x<<1|1])+bk[x<<1|1]+sum[x<<1|1]*(k-cnt[x<<1|1]);
        }
    }
}T;
int q,t;
inline bool check(int x){return T.qbk(1,1,t,x-1)-T.qft(1,1,t,x)>=0;}
signed main()
{
    freopen("kte.in","r",stdin);
    freopen("kte.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>q;
    for(int i=1;i<=q;i++) cin>>a[i],c[i]=a[i];
    sort(c+1,c+1+q);
    t=unique(c+1,c+1+q)-c-1;
    for(int i=1;i<=q;i++) a[i]=lower_bound(c+1,c+1+t,a[i])-c;
    int sum=0,n=0;
    gp_hash_table<int,bool> book;
    for(int i=1;i<=q;i++)
    {
        if(book[a[i]]) sum-=c[a[i]],n--,T.upd(1,1,t,a[i],-1);
        else sum+=c[a[i]],n++,T.upd(1,1,t,a[i],1);
        book[a[i]]^=1;
        int p=1;
        int val=0;
        while(p<=n)
        {
            int l=p+1,r=n,ans=p;
            bool now=check(p);
            while(l<=r)
            {
                int mid=(l+r)>>1;
                if(now==check(mid)) ans=mid,l=mid+1;
                else r=mid-1;
            }
            if(!check(p)) 
            {
                val+=T.QBK(1,1,t,ans-1)-T.QBK(1,1,t,p-2);
                val-=T.QFT(1,1,t,ans)-T.QFT(1,1,t,p-1);
            }
            p=ans+1;
        }
        cout<<sum+val<<'\n';
    }
    return 0;   
}